/**
 * 
 */
package com.company.pedidos.service;

import java.util.List;

import org.hibernate.service.spi.ServiceException;

import com.company.base.exception.DomainException;
import com.company.canonical.beans.JsonJTableClienteBean;
import com.company.canonical.beans.JsonJTableCorreoBean;
import com.company.canonical.beans.JsonJTableDetallePedidoBean;
import com.company.canonical.beans.JsonJTableDetallePrecioBean;
import com.company.canonical.beans.JsonJTableDocumentoBean;
import com.company.canonical.beans.JsonJTableNotaBean;
import com.company.canonical.beans.JsonJTableOptionBean;
import com.company.canonical.beans.JsonJTablePedidoBean;
import com.company.canonical.beans.JsonJTablePrecioBean;
import com.company.canonical.beans.JsonJTableProductoBean;
import com.company.canonical.beans.JsonJTableTelefonoBean;
import com.company.canonical.beans.JsonJTableVendedorBean;
import com.company.pedidos.domain.Cliente;
import com.company.pedidos.domain.Usuario;
import com.company.pedidos.domain.Visita;

/**
 * @author
 * 
 */
public interface PedidosService {

	/**
	 * 
	 * @return
	 * @throws ServiceException
	 */
	public List<JsonJTableOptionBean> listarTipoDocumento()
			throws ServiceException;

	/**
	 * 
	 * @return
	 * @throws ServiceException
	 */
	public List<JsonJTableOptionBean> listarEstadoPedido()
			throws ServiceException;

	/**
	 * 
	 * @param tipoDocumento
	 * @param nroDocumento
	 * @param nombreCliente
	 * @param pageable
	 * @return
	 * @throws DomainException
	 */
	public List<JsonJTableClienteBean> buscarCliente(String tipoDocumento,
			String nroDocumento, String nombreCliente, int jtStartIndex,
			int jtPageSize) throws DomainException;

	/**
	 * 
	 * @return
	 * @throws ServiceException
	 */
	public int obtenerNumeroCliente() throws DomainException;

	/***
	 * 
	 * @param idCliente
	 * @return
	 * @throws ServiceException
	 */
	public List<Visita> obtenerVisitaCliente(int idCliente)
			throws DomainException;

	/**
	 * 
	 * @param idCliente
	 * @return
	 * @throws ServiceException
	 */
	public Cliente obtenerDetalleCliente(String idCliente) throws DomainException;

	/**
	 * 
	 * @param idCliente
	 * @return
	 * @throws ServiceException
	 */
	public List<JsonJTableTelefonoBean> listarTelefonoCliente(String idCliente)
			throws DomainException;

	/**
	 * 
	 * @param idCliente
	 * @return
	 * @throws ServiceException
	 */
	public List<JsonJTableCorreoBean> listaCorreoCliente(String idCliente)
			throws DomainException;

	/**
	 * 
	 * @param idcliente
	 * @param startIndex
	 * @param pageSize
	 * @return
	 * @throws ServiceException
	 */
	public List<JsonJTableDocumentoBean> listaDocumentoCobrarCliente(
			String idcliente, int startIndex, int pageSize) throws DomainException;

	/**
	 * 
	 * @param idCliente
	 * @param startIndex
	 * @param pageSize
	 * @return
	 * @throws ServiceException
	 */
	public List<JsonJTableNotaBean> listaNotaCliente(String idCliente,
			int startIndex, int pageSize) throws DomainException;

	/**
	 * 
	 * @param codigoProducto
	 * @param categoriaProducto
	 * @param pageable
	 * @return
	 * @throws DomainException
	 */
	public List<JsonJTableProductoBean> buscarProducto(String codigoProducto,
			String categoriaProducto, Integer jtStartIndex, Integer jtPageSize) throws DomainException;

	/**
	 * 
	 * @param codigoListaPrecio
	 * @param fechaVigencia
	 * @param jtStartIndex
	 * @param jtPageSize
	 * @return
	 * @throws ServiceException
	 */
	public List<JsonJTablePrecioBean> buscarPrecio(String codigoListaPrecio,
			String fechaVigencia, int jtStartIndex, int jtPageSize)
			throws DomainException;

	/**
	 * 
	 * @param listaPrecioId
	 * @return
	 * @throws ServiceException
	 */
	public List<JsonJTableDetallePrecioBean> listaDetallePrecio(
			int listaPrecioId) throws DomainException;

	/**
	 * 
	 * @param fechaPedido
	 * @param codigoCliente
	 * @param estado
	 * @param jtStartIndex
	 * @param jtPageSize
	 * @return
	 * @throws ServiceException
	 */
	public List<JsonJTablePedidoBean> buscarPedido(String fechaPedido,
			String codigoCliente, String estado, int jtStartIndex, int jtPageSize)
			throws DomainException;

	/**
	 * 
	 * @param pedidoId
	 * @return
	 * @throws ServiceException
	 */
	public List<JsonJTableDetallePedidoBean> listaDetallePedido(int pedidoId)
			throws DomainException;

	/**
	 * 
	 * @param fechaPedido
	 * @param codigoCliente
	 * @param estado
	 * @param jtStartIndex
	 * @param jtPageSize
	 * @return
	 * @throws ServiceException
	 */
	public List<JsonJTableVendedorBean> buscarVendedor(String nombres,
			String apellidoPaterno, String apellidoMaterno, int jtStartIndex,
			int jtPageSize) throws DomainException;

	/**
	 * 
	 * @param usuario
	 * @param password
	 * @return
	 */
	public Usuario autorizarUsuario(String usuario, String password);

	
	
	Long buscarClienteCount(String tipoDocumento, String nroDocumento,
			String nombreCliente) throws ServiceException;

	Long buscarPedidoCount(String fechaPedido, String clienteCodigo,
			String estado) throws DomainException;

	Long buscarProductoCount(String codigoProducto, String categoriaProducto)
			throws ServiceException;

	Long buscarPrecioCount(String codigoListaPrecio, String fechaVigencia)
			throws ServiceException;

	Long buscarVendedorCount(String nombres, String apellidoPaterno,
			String apellidoMaterno) throws DomainException;

	Long listaNotaClienteCount(String clienteId) throws ServiceException;

	Long listaDocumentoCobrarClienteCount(String clienteId)
			throws ServiceException;

}
